这是要创建一个天气应用程序,显然它没有返回字符串,但是我已经尝试了解决该问题的所有方法。我是android开发的新手。这是我写的第一本代码,试图弄清楚自己。代码是:包com.example.sydbarret;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
TextView pressure;
TextView wind;
TextView humidity;
ImageView icon;
public class downloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
String result="";
HttpURLConnection urlConnection=null;
URL url;
try {
url = new URL(strings[0]);
urlConnection=(HttpURLConnection)url.openConnection();
InputStream in=urlConnection.getInputStream();
InputStreamReader reader=new InputStreamReader(in);
int data=reader.read();
while(data!=-1){
char current=(char)data;
result+=current;
data=reader.read();
}
return result;
} catch (Exception e) {
e.printStackTrace();
return " ";
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
JSONObject jsonObject=new JSONObject(s);
String weatherinfo= jsonObject.getString("currently");
Log.i("here", weatherinfo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadTask Task=new downloadTask();
String L="https://api.darksky.net/forecast/0283038cd6a6f1b33b835e635e98c478/37.8267,-122.4233";
Task.execute(L);
pressure=(TextView)findViewById(R.id.textView8);
wind=(TextView)findViewById(R.id.textView10);
humidity=(TextView)findViewById(R.id.textView9);
icon=(ImageView)findViewById(R.id.imageView);
}
}
这是一个非常标准的代码,它从api获取信息,然后在相应的textview中放置值。
您的代码正在运行。您是否忘记为清单添加INTERNET权限?
<uses-permission android:name="android.permission.INTERNET"/>