Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中使用HttpURLConnection启用缓存?_Java_Android_Caching_Httpurlconnection - Fatal编程技术网

Java 如何在android中使用HttpURLConnection启用缓存?

Java 如何在android中使用HttpURLConnection启用缓存?,java,android,caching,httpurlconnection,Java,Android,Caching,Httpurlconnection,如何在使用java的android中使用HttpURLConnection启用缓存 这是我的源代码: 公共类GetMenuData扩展异步任务{ 字符串服务器响应; @凌驾 受保护的字符串背景(字符串…字符串){ 网址; HttpURLConnection-urlConnection=null; 试一试{ url=新url(字符串[0]); urlConnection=(HttpURLConnection)url.openConnection(); urlConnection.setReques

如何在使用java的android中使用HttpURLConnection启用缓存

这是我的源代码:
公共类GetMenuData扩展异步任务{
字符串服务器响应;
@凌驾
受保护的字符串背景(字符串…字符串){
网址;
HttpURLConnection-urlConnection=null;
试一试{
url=新url(字符串[0]);
urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod(“GET”);
setRequestProperty(“内容类型”、“应用程序/json”);
urlConnection.setDoInput(true);
int responseCode=urlConnection.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
server_response=readStream(urlConnection.getInputStream());
Log.v(“CatalogClient”,服务器响应);
}
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
试一试{
JSONObject res=新的JSONObject(服务器响应);
//获取json数组
JSONArray Jarray=res.getJSONArray(“菜单”);
for(int i=0;i
主要活动
public类MainActivity扩展了AppCompatActivity{
私人摊位摊位;
专用工具栏适配器工具栏适配器;
私有视图寻呼机mViewPager;
private ArrayList itemsToolbar_菜单;
私人部门SPAGERAAdapter MSECTIONSPAGERAAdapter;
私人GetMenuData iData;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
itemsToolbar_菜单=新建ArrayList();
mviewpage=findviewbyd(R.id.container);
tabLayout=findviewbyd(R.id.tabs);
//请求数据
iData=新的GetMenuData();
执行(URL_菜单);
}
它工作正常,但当我在emulator上运行应用程序时,没有互联网连接,它会给我这个错误
java.lang.NullPointerException:尝试调用虚拟方法'int java.lang.String.length()'在空对象引用上

欢迎使用SO-您应该发布完整的堆栈跟踪,以便任何人能够帮助您,以及堆栈跟踪中的任何代码您没有internet,因此您没有得到导致当前错误的json响应
Jarray.length()
为空。您的问题在术语
cached
上无法解决,您需要
存储对sqlite数据库的json响应,以便在脱机时再次使用它。我还建议您仅使用asynctask的onPostExecute()进行汇总操作(小操作),并将长线程操作放在doInBackground()中(例如:您的for循环)。在Android http类不推荐使用的情况下,我建议使用改型、OKhttp等
public class GetMenuData extends AsyncTask<String , Void ,String> {
    String server_response;

    @Override
    protected String doInBackground(String... strings) {

        URL url;
        HttpURLConnection urlConnection = null;

        try {
            url = new URL(strings[0]);
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setRequestProperty("Content-Type","application/json");
            urlConnection.setDoInput(true);

            int responseCode = urlConnection.getResponseCode();

            if(responseCode == HttpURLConnection.HTTP_OK){
                server_response = readStream(urlConnection.getInputStream());
                Log.v("CatalogClient", server_response);
            }



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

        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        try {

            JSONObject res = new JSONObject(server_response);
            //get json array
            JSONArray Jarray = res.getJSONArray("menu");
            for (int i = 0; i < Jarray.length(); i++) {
                JSONObject object = Jarray.getJSONObject(i);
                MenuItem n = new MenuItem(
                        object.getInt("ID"),
                        object.getString("title"),
                        object.getString("image"));
                Log.e("TAG", "" + n.getId());
                itemsToolbar_Menu.add(n);
            }

            mViewPager.setAdapter(mSectionsPagerAdapter);
            setupTabLayout(toolbarAdapter);

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

    }
}
public class MainActivity extends AppCompatActivity {

private TabLayout tabLayout;
private ToolbarAdapter toolbarAdapter;
private ViewPager mViewPager;
private ArrayList<MenuItem> itemsToolbar_Menu;
private SectionsPagerAdapter mSectionsPagerAdapter;
private GetMenuData iData;

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

    itemsToolbar_Menu = new ArrayList<>();

    mViewPager = findViewById(R.id.container);
    tabLayout = findViewById(R.id.tabs);

    //Request Data
    iData = new GetMenuData();
    iData.execute(URL_MENU);

}