Android 如何在AsyncTask中通过Json加载微调器
我是Android开发的新手。我想通过Json数组填充微调器,Json数组从Http请求加载(通过AsyncTask)。我的AsyncTask位于名为Load_spinnrs的单独类中。我为什么要这么做 这是我的http请求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
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();
}
}
}