Android 如何在AsyncTask中通过Json加载微调器

Android 如何在AsyncTask中通过Json加载微调器,android,android-asynctask,android-spinner,Android,Android Asynctask,Android Spinner,我是Android开发的新手。我想通过Json数组填充微调器,Json数组从Http请求加载(通过AsyncTask)。我的AsyncTask位于名为Load_spinnrs的单独类中。我为什么要这么做 这是我的http请求 try{ String DataSendingTo="http://www.mysite.com/AppRequest/load_data"; //HttpClient HttpClient httpClient = new DefaultHtt

我是Android开发的新手。我想通过Json数组填充微调器,Json数组从Http请求加载(通过AsyncTask)。我的AsyncTask位于名为Load_spinnrs的单独类中。我为什么要这么做

这是我的http请求

try{

    String DataSendingTo="http://www.mysite.com/AppRequest/load_data";

    //HttpClient
    HttpClient httpClient = new DefaultHttpClient();

    //Post header
    HttpPost httpPost = new HttpPost(DataSendingTo);


    //Adding data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

    nameValuePairs.add(new BasicNameValuePair("authorized","001"));



    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    // execute HTTP post request
    HttpResponse response = httpClient.execute(httpPost);


    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    StringBuilder builder = new StringBuilder();
    for (String line = null; (line = reader.readLine()) != null;) {
        builder.append(line).append("\n");
    }
    JSONTokener tokener = new JSONTokener(builder.toString());
    JSONArray finalResult = new JSONArray(tokener);


   //How to load Spinner ?????



} catch (ClientProtocolException e) {
    e.printStackTrace();

} catch (IOException e) {
    e.printStackTrace();

}
试试看{
字符串DataSendingTo=”http://www.mysite.com/AppRequest/load_data";
//HttpClient
HttpClient HttpClient=新的DefaultHttpClient();
//柱头
HttpPost HttpPost=新的HttpPost(DataSendingTo);
//添加数据
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“授权”、“001”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP post请求
HttpResponse response=httpClient.execute(httpPost);
BufferedReader=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent(),“UTF-8”);
StringBuilder=新的StringBuilder();
for(String line=null;(line=reader.readLine())!=null;){
builder.append(行).append(“\n”);
}
JSONTokener tokener=新的JSONTokener(builder.toString());
JSONArray finalResult=新JSONArray(标记器);
//如何加载微调器?????
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}

在获得
JSON的数组之后

你必须这样做:

final String[] items = new String[jsonArray.length()]; 

// looping through All Contacts
for(int i = 0; i < jsonArray.length(); i++){

    JSONObject c = jsonArray.getJSONObject(i);
    // Storing each json item in variable

    String name = c.getString(TAG_NAME);


    items[i]=c.getString(TAG_NAME);
    System.out.println("Hello events "+items);
}

ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, items);       

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

sp.setAdapter(adapter);
final String[]items=新字符串[jsonArray.length()];
//通过所有触点循环
for(int i=0;i

看看这可能对你有帮助:

 GetServerData.setOnClickListener(new OnClickListener() {
 public void onClick(View v) {

     // Server Request URL
     String serverURL = "http://androidexample.com/media/webservice/getPage.php";

     // Create Object and call AsyncTask execute Method
     new LongOperation().execute(serverURL);

 }
});  

    protected void onPreExecute() {
      // NOTE: You can call UI Element here.

      //UI Element
      uiUpdate.setText("Output : ");
      Dialog.setMessage("Downloading source..");
      Dialog.show();
 }
有关更多详细信息,请访问:


最好的祝愿

为了便于理解,请将您的Load_spinnrs类加载为主类的子类

比如,

public class Main_Class extends Activity
{

private Spinner spinner;
       protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.userprofiles);
 //init spinner here

    }

private class Load_spinnrs extends AsyncTask<Void, Void, String>{


        @Override
        protected void onPreExecute() {

        }
        @Override
        protected String doInBackground(Void... params) {
// your http request
        }
        @Override
        protected void onPostExecute(String result) {
//update spinner here.
}


}
公共类主类扩展活动
{
私人纺纱机;
创建时受保护的void(包arg0){
super.onCreate(arg0);
setContentView(R.layout.userprofiles);
//这里是初始微调器
}
私有类加载\u spinnrs扩展异步任务{
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护字符串doInBackground(无效…参数){
//您的http请求
}
@凌驾
受保护的void onPostExecute(字符串结果){
//在这里更新微调器。
}
}

如果要在单独的类中扩展
AsyncTask
,则需要传递活动上下文,从中执行扩展以访问普通java类中的UI元素。为此,可以使用
Load\u spinnrs
类构造函数获取活动上下文,并使用
onPostExecute
访问Spinn呃作为:

class  Load_spinnrs extends AsyncTask<String,String,String>{
Activity activity;
Context context;
public Load_spinnrs(Activity activity,Context context){
 this.activity=activity;
 this.context=context;
}
...
  @Override
  protected void onPostExecute(String result) {
   // TODO Auto-generated method stub
     //access UI elements here..
     Spinner mySpinner = (Spinner)activity.findViewById(R.id.my_spinner);   
     adapter = new ArrayAdapter<String> (context, 
                             android.R.layout.simple_spinner_item, items);
     //....  
     super.onPostExecute(result);
  }

}

下面是AsyncTask中的实现,用于显示加载微调器,然后在AsyncTask完成后将其关闭

private class GetContacts extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        <put code here>
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
                }

}

}
私有类GetContacts扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//显示进度对话框
pDialog=新建进度对话框(MainActivity.this);
setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
//关闭进度对话框
if(pDialog.isShowing())
pDialog.disclose();
}
}
}

转到此ArrayAdapter=新的ArrayAdapter(此,android.R.layout.simple\u微调器\u项,项);在设置sp.setAdapter(adapter)时,给出“未定义构造函数数组适配器(RequestSend,int,String[])更改
yourActivity.this
而不是
this
;出现错误“只有创建视图层次结构的原始线程才能接触其视图”。请在每行后面放置日志标记,以便您确切了解问题所在,请尝试获取
adapter.getCount()我的任务正常。我想从AsyncTask加载微调器。您不理解这个问题。@SajithaRathnayake:Activity。要将活动上下文启动AsyncTask作为
new Load\u spinnrs(this)传递。执行(“”
,我认为您必须初始化
onCreate()
中的每个UI元素,然后您可以在
AsyncTask
(字符串结果)中使用它们的对象,结果会是什么?@SajithaRathnayake:因为使用AsyncTask请参见[此处]()为什么我们有方法和不同的参数含义。那么我如何将Json数组返回到onPostExecute呢?
private class GetContacts extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        <put code here>
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
                }

}

}