Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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 如何使用从JSON文件提取的数据更新home小部件_Java_Android_Json_Android Widget - Fatal编程技术网

Java 如何使用从JSON文件提取的数据更新home小部件

Java 如何使用从JSON文件提取的数据更新home小部件,java,android,json,android-widget,Java,Android,Json,Android Widget,我有一个home小部件,它“应该”显示从我的服务器从JSON文件中提取的文本,但它不显示任何内容 我的Java代码: package com.test.testing import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.text.DateFormat; import java.text.SimpleDateFormat; import j

我有一个home小部件,它“应该”显示从我的服务器从JSON文件中提取的文本,但它不显示任何内容

我的Java代码:

package com.test.testing

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Locale;
import java.util.Date;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;

public class DisplayHadith extends AppWidgetProvider {

    public static String CLOCK_WIDGET_UPDATE = "CLOCK_WIDGET_UPDATE";

    Calendar c = Calendar.getInstance();
    DateFormat df = new SimpleDateFormat("LLDyyyy", Locale.US);
    DefaultHttpClient httpclient;
    HttpPost httppost;
    InputStream inputStream = null;
    String result = null;
    StringBuilder sb;
    JSONArray jsonArray;
    String[] date, quote, by;
    RemoteViews views;
    int appWidgetId;
    String t1, t2;

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);

        if (CLOCK_WIDGET_UPDATE.equals(intent.getAction())) {
            Toast.makeText(context, "onReceiver()", Toast.LENGTH_LONG).show();
        }

        //new GetJSON().execute(null, null, null);
    }
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        Log.i("ExampleWidget",  "Updating widgets " + Arrays.asList(appWidgetIds));

        // Perform this loop procedure for each App Widget that belongs to this
        // provider
        for (int i = 0; i < N; i++) {
            appWidgetId = appWidgetIds[i];

            // Create an Intent to launch MainActivity
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            // Get the layout for the App Widget and attach an on-click listener
            // to the button
            views = new RemoteViews(context.getPackageName(),
                    R.layout.widgetlayout);

            views.setOnClickPendingIntent(R.id.ivCal, pendingIntent);
            views.setOnClickPendingIntent(R.id.tvParkStatus, pendingIntent);
            views.setOnClickPendingIntent(R.id.tvToday, pendingIntent);

            new GetJSON().execute();

            views.setTextViewText(R.id.tvToday, t1);
            views.setTextViewText(R.id.tvParkStatus, t2);

            // Tell the AppWidgetManager to perform an update on the current app
            // widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
    public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
        RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
        appWidgetManager.updateAppWidget(appWidgetId, updateViews);
    }
    public class GetJSON extends AsyncTask<Void, Void, String> {
         @Override
         protected String doInBackground(Void... params) { //Running in background
             try {
                 httpclient = new DefaultHttpClient(new BasicHttpParams());
                 HttpPost httppost = new HttpPost("http://pagesbyz.com/hadith.json");
                 // Depends on your web service
                 httppost.setHeader("Content-type", "application/json");
                HttpResponse response = httpclient.execute(httppost);           
                HttpEntity entity = response.getEntity();

                inputStream = entity.getContent();
                // json is UTF-8 by default
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
                sb = new StringBuilder();

                String line = null;
                while ((line = reader.readLine()) != null)
                {
                    sb.append(line + "\n");
                }
                result = sb.toString();

            } catch (Exception e) {
                Log.i("TEST", e.toString());
                // Oops
            }
            finally {
                try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
            }
            return result;
         }

         @Override
         protected  void onPreExecute() { //Activity is on progress
         }

         @Override
        protected void onPostExecute(String result) {
             try {
                 df.format(new Date());
                 jsonArray = new JSONArray(result);
                 date = new String[jsonArray.length()];
                 quote = new String[jsonArray.length()];
                 by = new String[jsonArray.length()];
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObj = (JSONObject) jsonArray.get(i);
                        date[i] = jsonObj.getString("Date");
                        quote[i] = jsonObj.getString("Quote");
                        by[i] = jsonObj.getString("By");
                        Log.i("DATE", date[i]);
                        Log.i("QUOTE", quote[i]);
                        Log.i("BY", by[i]);
                    } // End the for loop
                    t1 = date[0];
                    t2 = quote[0];
                    //views.setTextViewText(R.id.tvToday, date[0]);
                    //views.setTextViewText(R.id.tvParkStatus, quote[0]);
             }
             catch (JSONException e) {
                 e.printStackTrace();
             }
        }
    }
}
package com.test.testing
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.array;
导入java.util.Calendar;
导入java.util.Locale;
导入java.util.Date;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.params.BasicHttpParams;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.pendingent;
导入android.appwidget.AppWidgetManager;
导入android.appwidget.AppWidgetProvider;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.util.Log;
导入android.widget.remoteview;
导入android.widget.Toast;
公共类DisplayHadith扩展了AppWidgetProvider{
公共静态字符串CLOCK\u WIDGET\u UPDATE=“CLOCK\u WIDGET\u UPDATE”;
Calendar c=Calendar.getInstance();
DateFormat df=新的SimpleDataFormat(“LLDyyyy”,Locale.US);
默认httpclient httpclient;
HttpPost-HttpPost;
InputStream InputStream=null;
字符串结果=null;
为某人做准备;
JSONArray JSONArray;
字符串[]日期,引号,按;
远程视图;
int-appWidgetId;
字符串t1,t2;
@凌驾
公共void onReceive(上下文、意图){
super.onReceive(上下文、意图);
if(CLOCK\u WIDGET\u UPDATE.equals(intent.getAction())){
Toast.makeText(上下文,“onReceiver()”,Toast.LENGTH_LONG.show();
}
//新建GetJSON().execute(null,null,null);
}
公共void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,int[]AppWidgetId){
final int N=appWidgetIds.length;
Log.i(“ExampleWidget”,“更新Widget”+Arrays.asList(AppWidgetId));
//对属于此应用程序的每个应用程序小部件执行此循环过程
//提供者
对于(int i=0;i<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="@dimen/app_min_width"
    android:minHeight="@dimen/app_min_height"
    android:updatePeriodMillis="200"
    android:initialLayout="@layout/widgetlayout" >
    <!-- hourly check -->
</appwidget-provider>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="@drawable/background" >

    <ImageView
        android:id="@+id/ivCal"
        android:layout_width="@dimen/cal_icon_size"
        android:layout_height="@dimen/cal_icon_size"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:background="#FF0000" />
    <LinearLayout
        android:id="@+id/llTexts"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:orientation="vertical"
        android:layout_toRightOf="@+id/ivCal"
        android:weightSum="2" >
        <TextView
            android:id="@+id/tvToday"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:textSize="@dimen/date_text_size"
            android:textStyle="bold"
            android:paddingLeft="@dimen/text_padding_left"
            android:text=""
            android:gravity="center"
            android:layout_weight="1.6"
            android:background="#FFFFFF"
            android:textColor="#000000" />
        <TextView
            android:id="@+id/tvParkStatus"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:textSize="@dimen/status_text_size"
            android:textStyle="bold"
            android:paddingRight="@dimen/text_padding_right"
            android:text=""
            android:gravity="center_vertical|right"
            android:layout_weight="0.4"
            android:background="#00FF00"
            android:textColor="#CC0000" />
    </LinearLayout>

</RelativeLayout>