它显示:W / System.err:org.json.JSONException:当前没有值

问题描述 投票:0回答:1

这是要创建一个天气应用程序,显然它没有返回字符串,但是我已经尝试了解决该问题的所有方法。我是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中放置值。

java android api android-studio weather-api
1个回答
0
投票

您的代码正在运行。您是否忘记为清单添加INTERNET权限?

<uses-permission android:name="android.permission.INTERNET"/>
© www.soinside.com 2019 - 2024. All rights reserved.