Note that there are some explanatory texts on larger screens.

plurals
  1. POrunOnUiThread(new Runnable(){}) is undefined for the type new Thread(){}
    text
    copied!<p>Looking at the part:</p> <pre><code>runOnUiThread(new Runnable() { </code></pre> <p>I have the problem:</p> <pre><code>The method runOnUiThread(new Runnable(){}) is undefined for the type new Thread(){} </code></pre> <p>So I understand that runOnUiThread must come from an activity. But Im not sure how this will be implemented? Its a dialog from within a Preference / settings view</p> <p>This where the ChannelsDialogPreference comes form: <strong>pref_channels.xml</strong></p> <pre><code>&lt;PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" &gt; &lt;com.example.tvrplayer.ChannelsDialogPreference android:title="@string/pref_channels_dialog_title" android:dialogMessage="@string/pref_channels_dialog_message" android:negativeButtonText="test"/&gt; &lt;/PreferenceScreen&gt; </code></pre> <p><strong>ChannelsDialogPreference:</strong></p> <pre><code>package com.example.tvrplayer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.preference.DialogPreference; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; public class ChannelsDialogPreference extends DialogPreference { public static Context ctx; // Activity activity; public ChannelsDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); this.ctx = context; } @Override protected View onCreateDialogView() { // Set loading spinner // Start looking for channels // When complete, show channels LayoutInflater inflater = ((SettingsActivity) ctx).getLayoutInflater(); final View vw = inflater.inflate(R.layout.channel_content_view, null); // Do this in a new Thread Thread thread = new Thread() { @Override public void run() { try { final JSONArray channels; String username = null; String linkid = null; final String apiurl = "http://192.168.2.136:8080"; final String channelID = null; final DatabaseHandler db = new DatabaseHandler(ctx); List&lt;User&gt; users = db.getAllUsers(); for (User cn : users) { linkid = cn.getLinkID(); username = cn.getUserName(); } db.close(); final ArrayList&lt; HashMap &lt; String, String &gt; &gt; channelList = new ArrayList &lt; HashMap &lt; String, String &gt; &gt; (); try { if ( channelID != null ) { channels = Json.getJson(apiurl + "/rest/channel/"+ linkid +"/"+ username + "/" + channelID, "GET"); Log.i("CHANNELS", channels.toString()); for (int i=0; i &lt; channels.length(); i++) { JSONObject json_data = channels.getJSONObject(i); String name = json_data.getString("Name"); String channelid = json_data.getString("ChannelID"); HashMap&lt;String, String&gt; channelObject = new HashMap&lt;String, String&gt;(); // if ( json_data.getString("ParentPath") == "" ) { channelObject.put("id", channelid); channelObject.put("name", name); channelList.add(channelObject); // } } } else { channels = Json.getJson(apiurl + "/rest/channel/"+ linkid +"/"+ username, "GET"); Log.i("CHANNELS", channels.toString()); for (int i=0; i &lt; channels.length(); i++) { JSONObject json_data = channels.getJSONObject(i); String name = json_data.getString("Name"); String channelid = json_data.getString("ChannelID"); HashMap&lt;String, String&gt; channelObject = new HashMap&lt;String, String&gt;(); Log.i("CHANNEL LEN", ""+ json_data.getString("ParentID").length()); if ( json_data.getString("ParentID").length() &lt; 32 ) { channelObject.put("id", channelid); channelObject.put("name", name); channelList.add(channelObject); } } } runOnUiThread(new Runnable() { public void run() { HiddenChannelsListAdapter adapter = new HiddenChannelsListAdapter(ctx, channelList); ListView lv = (ListView) vw.findViewById(R.id.list); lv.setAdapter(adapter); lv.isClickable(); lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView&lt;?&gt; arg0, View arg1, int arg2, long arg3) { Log.i("CLICKED ON LV ITEM", "YEA"); } }); } }); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } }; thread.start(); // new ChannelHandler().execute(apiurl, username, linkid, vw, ctx, channelID); return vw; } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); persistBoolean(positiveResult); } @Override public void onClick (DialogInterface dialog, int which) { super.onClick(dialog, which); // Log.v("which", Integer.toString(which)); // if(which == -1) { //Clear all // new ChannelHandler().execute(apiurl, username, linkid, vw, ctx, channelID); } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload