首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AsyncTask进行接口调用

使用AsyncTask进行接口调用
EN

Stack Overflow用户
提问于 2018-12-10 01:49:05
回答 1查看 77关注 0票数 1

我正在尝试使用android studio访问流媒体/互联网API。我的应用程序接口调用在没有使用AsyncTask的情况下可以在Eclipse中工作,所以我尝试在Android Studio中使用AsyncTask来调用应用程序接口,但是我不确定为什么它不能工作。当调用工作时,我使用缓冲读取器和输入流的方式与在eclipse中使用它们的方式相同。我也被允许在我的AndroidManifest.xml中使用互联网。

注意:出于显而易见的原因,我拿出了我的API密钥。

代码语言:javascript
复制
    import android.content.Intent;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.os.AsyncTask;
    import android.view.View;
    import android.widget.EditText;
    import android.view.View.OnClickListener;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import android.widget.Button;
    import android.widget.Toast;

 public class MainActivity extends Activity implements OnClickListener {

private static final String TAG_DEBUG = MainActivity.class.getName();
public static final String TAG_ID = "id";
public static final String TAG_CURRENTTEMP = "currenttemp";
public static final String TAG_MAXTEMP = "maxtemp";
public static final String TAG_MINTEMP = "mintemp";

private EditText enteredzip;
private String zip;
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    enteredzip = (EditText) findViewById(R.id.editText);

    button = (Button) findViewById(R.id.button);

    button.setOnClickListener(this);
}


public void onClick(View v) {
    zip = enteredzip.getText().toString();

    new RetrieveFeedTask().execute();

}

class RetrieveFeedTask extends AsyncTask<Void, Void, String> {

    private Exception exception;

    protected void onPreExecute() {
    }

   protected String doInBackground(Void... urls) {

        String BASE_URL = "http://api.openweathermap.org/data/2.5/weather?zip=";
        String API_CALL = "&APPID=key";
        // Do some validation here
        HttpURLConnection con = null;
        InputStream is = null;
        String bufferedOutput = "";
        try {
            con = (HttpURLConnection) (new URL(BASE_URL + zip + API_CALL)).openConnection();
            con.setRequestMethod("GET");
            con.setDoInput(true);
            con.setDoOutput(true);
            con.connect();

            StringBuffer buffer = new StringBuffer();
            is = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line = null;
            while((line = br.readLine()) != null)
                buffer.append(line + "\r\n");
            is.close();
            con.disconnect();
            bufferedOutput = buffer.toString();
            return bufferedOutput;
        }
        catch(Exception e) {
            Log.e("ERROR", e.getMessage(), e);
            return null;
        } finally {
            try{
                is.close();
            }catch(Throwable T){}
            try{
                con.disconnect();
            }catch(Throwable T){}
        }
    }

    protected void onPostExecute(String response) {
        if(response == null) {
            //response = "THERE WAS AN ERROR";
            //Toast.makeText(MainActivity.this, getResources().getString(R.string.error_et), Toast.LENGTH_LONG).show();
            return;
        }
        //Log.i("INFO", response);
        // TODO: check this.exception
        // TODO: do something with the feed
        Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG).show();
        String id = "";
        String currenttemp = "";
        String maxtemp = "";
        String mintemp = "";


        for (int i = 0; i < response.length(); i++) {
            if (response.substring(i, i + 2).equals("id")) {
                id = response.substring(i + 4, i + 7);
                break;
            }
        }

        for (int i = 0; i < response.length(); i++) {
            if (response.substring(i, i + 4).equals("temp")) {
                currenttemp = response.substring(i + 6, i + 9);
                break;
            }
        }

        for (int i = 0; i < response.length(); i++) {
            if (response.substring(i, i + 8).equals("temp_min")) {
                mintemp = response.substring(i + 10, i + 13);
                break;
            }
        }

        for (int i = 0; i < response.length(); i++) {
            if (response.substring(i, i + 8).equals("temp_max")) {
                maxtemp = response.substring(i + 10, i + 13);
                break;
            }
        }

        launchMain2Activity(id, currenttemp, maxtemp, mintemp);
    }
}

private void launchMain2Activity(String id, String currenttemp, String maxtemp, String mintemp) {
    Intent Main2Activity = new Intent(MainActivity.this, Main2Activity.class);

    Main2Activity.putExtra(TAG_ID, id);
    Main2Activity.putExtra(TAG_CURRENTTEMP, currenttemp);
    Main2Activity.putExtra(TAG_MAXTEMP, maxtemp);
    Main2Activity.putExtra(TAG_MINTEMP, mintemp);


    startActivity(Main2Activity);
}
EN

回答 1

Stack Overflow用户

发布于 2018-12-10 03:55:32

尝试使用以下命令:

代码语言:javascript
复制
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")) ; 

UTF-8是一种使用8位序列对Unicode字符进行编码的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53695023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档