gpt4 book ai didi

android - 使用 AsyncTask 调用 API

转载 作者:行者123 更新时间:2023-11-30 05:11:20 26 4
gpt4 key购买 nike

我正在尝试使用 android studio 访问流媒体/互联网 API。我的 API 调用在不使用 AsyncTask 的情况下在 Eclipse 中工作,因此我尝试在 Android Studio 中使用 AsyncTask 来调用 API,但我不确定为什么它不起作用。我使用缓冲阅读器和输入流的方式与调用工作时我在eclipse中使用它们的方式相同。我也有权在我的 AndroidManifest.xml 中使用互联网。

注意:出于显而易见的原因,我取出了我的 API key 。

    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);
}

最佳答案

尝试使用这个:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")) ; 

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

关于android - 使用 AsyncTask 调用 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com