在oncreate中使用asynctask的变量

时间:2013-08-11 11:21:03

标签: java android android-asynctask

我终于能够与我的网络服务建立联系,

我无法读取logcat中的数据

之后我根据需要拆分了json:

(这是编辑前的代码)

但我无法工作的是:

(这是编辑前的代码)

似乎我不能在我的oncreate类中使用变量bedrijfsnaam

我的完整代码:         package com.example.deceunincktechniekers;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import java.io.*;
import java.util.LinkedList;
import java.util.List;

import org.apache.http.client.*;
import org.apache.http.*;
import org.json.JSONException;
import org.json.JSONObject;

 public class BTWcontrole extends Activity 
{

TextView btwuitvoer;
EditText landcode;
EditText nummer;
Button verstuur;
String land;
String num;
String antwoord;
Context btwcontrolecontext;
String jsonData;
private String bedrijfsnaam = new String();
String zoekurl = "http://www.softnaert.be/SNWebservices/SNWeb.wso/checkVat/JSON";

@Override
public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
        setContentView(R.layout.btwcontrole);
        btwcontrolecontext = this;
    btwuitvoer = (TextView) findViewById(R.id.resultaat);
    verstuur = (Button) findViewById(R.id.controleer);
    landcode = (EditText) findViewById(R.id.landcode);
    nummer = (EditText) findViewById(R.id.btwnr);

verstuur.setOnClickListener(new OnClickListener()
{


@Override
public void onClick(View v) {

    btwopvragen loaderTask = new btwopvragen();
    loaderTask.execute();

    land = landcode.getText().toString();
    num = nummer.getText().toString();
    Log.i("bedrijfsnaam in onclick", bedrijfsnaam);
    btwuitvoer.setText(bedrijfsnaam);   
}   
});};

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

ProgressDialog dialog;

@Override
protected void onPreExecute() {
    dialog = new ProgressDialog(btwcontrolecontext);
    dialog.setTitle("btwnummer ophalen");
    dialog.show();
    super.onPreExecute();
}

@Override
protected Void doInBackground(Void... params) {
    // toegevoegde code om parameters aan de code toe te voegen
    if(!zoekurl.endsWith("?")){
            zoekurl += "?";
    };

    List<NameValuePair> parameters = new LinkedList<NameValuePair>();
    parameters.add(new BasicNameValuePair("llcountryCode", String.valueOf(land)));
    parameters.add(new BasicNameValuePair("llvatNumber", String.valueOf(num)));

    String parameterString = URLEncodedUtils.format(parameters, "utf-8");


    // effectieve http request met de parameters toegevoegd
    HttpClient client = new DefaultHttpClient();
    HttpGet aanvraag = new HttpGet(zoekurl + parameterString);


    // foutanalyse van de http request
    try
    {
        HttpResponse antwoord = client.execute(aanvraag);
        StatusLine statuslijn = antwoord.getStatusLine();
        int statuscode = statuslijn.getStatusCode();
        if(statuscode != 200){
            return null;
        }

        InputStream jsonStream = antwoord.getEntity().getContent();
        BufferedReader reader= new BufferedReader(new InputStreamReader(jsonStream));
        StringBuilder builder = new StringBuilder();
        String lijn;

        while((lijn = reader.readLine())!= null){
            builder.append(lijn);

        }

        jsonData = builder.toString();
        // met de volgende lijn is de data zichtbaar in de logcat
        Log.i("btw geretourneerde data", jsonData);

        // hier beginnen we met de json data te ontmantelen
        JSONObject json = new JSONObject(jsonData);
        String bedrijfsnaam = json.getString("sCompanyName"); 
        Log.i("bedrijfsnaam in asynctask", bedrijfsnaam);


    }
    catch (ClientProtocolException e){

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

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

        e.printStackTrace();
    }


    return null;
}   
@Override
protected void onPostExecute(Void result) {
    Log.i("bedrijfsnaam in onpostexecute", bedrijfsnaam);   
    dialog.dismiss();
    super.onPostExecute(result);

    }


}


}

1 个答案:

答案 0 :(得分:0)

bedrijfsnaam声明为类中的字段。

        private JSONObject json = new JSONObject(...);//here if exists you should use default       constructor if not, you should find a way to put an argument to it.


    ...
       @Override
    protected Void doInBackground(Void... params) {
         .......

     bedrijfsnaam = json.getJSONObject("sCompanyName");
         .....
         }
    .....

        @Override
    public void onCreate(Bundle savedInstanceState){
         ....
        public void onClick(View v) {
        antwoord = bedrijfsNaam;
                btwuitvoer.setText(antwoord)
        ....
}