应用程序崩溃使用Android Studio,Sunshine App,无法获得AsynTask的概念

时间:2015-07-07 23:40:00

标签: android

我在编程方面特别陌生,并且无论何时在模拟器或移动设备上运行它都无法弄清楚错误,它说,App已停止工作。 请帮我搞清楚 提前谢谢

主要活动

.custom-list li {
  display: inline;
  font-size: 40px;
  color: #fff;
}
.custom-list li:hover {
  color: #888;
  cursor: pointer;
}
.item img {
  width: 100%;
}
.custom-list {
  top: 15px;
  margin: auto;
  position: absolute;
  width: 50%;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  text-align: center;
  right: 15px;
  z-index: 1;
  list-style: none;
}

ForecastFragement

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" />

<div id="locations" class="carousel slide" data-ride="carousel">
  <ol class="custom-list">
    <li data-target="#locations" data-slide-to="0" class="active"><span class="glyphicon glyphicon-th-large"></span>
    </li>
    <li data-target="#locations" data-slide-to="1"><span class="glyphicon glyphicon-th"></span>
    </li>
    <li data-target="#locations" data-slide-to="2"><span class="glyphicon glyphicon-th-list"></span>
    </li>
    <li data-target="#locations" data-slide-to="3"><span class="glyphicon glyphicon-list"></span>
    </li>
  </ol>
  <div class="carousel-inner">
    <div class="item active ">
      <img src="http://placehold.it/900x200?text=First slide" alt="">
    </div>
    <div class="item">
      <img src="http://placehold.it/900x200?text=Second slide" alt="">
    </div>
    <div class="item">
      <img src="http://placehold.it/900x200?text=Third slide" alt="">
    </div>
    <div class="item">
      <img src="http://placehold.it/900x200?text=Fourth slide" alt="">
    </div>
  </div>
  <a class="left carousel-control" href="#locations" data-slide="prev">
    <span class="glyphicon glyphicon-chevron-left"></span>
  </a>
  <a class="right carousel-control" href="#locations" data-slide="next">
    <span class="glyphicon glyphicon-chevron-right"></span>
  </a>
</div>

activity_main.xml中

package com.example.android.sunshine.app;

import android.annotation.TargetApi;
import android.support.v4.app.Fragment;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
    import java.util.List;

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null){
         getSupportFragmentManager().beginTransaction()
         .add(R.id.container, new ForecastFragment())
         .commit();

         }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

AndroidManifest

package com.example.android.sunshine.app;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by Nabahat on 7/8/2015.
 */
public class ForecastFragment extends Fragment {

    public ForecastFragment(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        String[] forecastArray = {
                "Today - Sunny - 88/63",
                "Tomorrow - Foggy - 70/40",
                "Weds - Cloudy - 72/63",
                "Thurs - Asteroids - 75/65",
                "Fri - Heavy Rain - 65/56",
                "Sat - HELP TRAPPED IN WEATHERSTATION - 60/51",
                "Sun - Sunny - 80/68"
        };

        List<String> weekForecast = new ArrayList<String>(
                Arrays.asList(forecastArray));

        ArrayAdapter<String> mForecastAdapter = new ArrayAdapter<String>(
                getActivity(),
                R.layout.list_item_forecast,
                R.id.list_item_forecast_textview,
                weekForecast);
        ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast);
        listView.setAdapter(mForecastAdapter);

        return rootView;
    }

    public class FetchWeatherTask extends AsyncTask<Void, Void, Void> {
        private final String LOG_TAG = FetchWeatherTask.class.getSimpleName();

        @Override
        protected Void doInBackground(Void... params){
            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String forecastJsonStr = null;

            try {
                URL url = new URL("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7");
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                InputStream inputStream = urlConnection.getInputStream();
                StringBuffer buffer = new StringBuffer();
                if (inputStream == null) {
                    return null;
                }
                reader = new BufferedReader(new InputStreamReader(inputStream));

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

                if (buffer.length() == 0) {
                    return null;
                }
                forecastJsonStr = buffer.toString();
            } catch (IOException e) {
                Log.e(LOG_TAG, "Error ", e);
                return null;

            } finally{
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {
                        Log.e(LOG_TAG, "Error closing stream", e);
                    }
                }
            }
        return null;
        }
    }
}

Fragment_main.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment"
    android:name="com.example.android.sunshine.app.MainActivity"
    tools:layout="@layout/fragment_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

这是log

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.sunshine.app" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2 个答案:

答案 0 :(得分:2)

问题是,在您的main activity_main.xml中,您使用了一个片段标记来加载所需的片段,但是您使用了错误的片段名称。 您使用android:name="com.example.android.sunshine.app.MainActivity"后应使用android:name="com.example.android.sunshine.app.ForecastFragment

因为你在xml中这样做会删除写在onCreate()中的事务代码。

它与异步任务无关

答案 1 :(得分:0)

我也采取相同的方针。评论以下几行对我来说很有用 -

&#13;
&#13;
if (savedInstanceState == null)
{
         getSupportFragmentManager().beginTransaction()
         .add(R.id.container, new ForecastFragment())
         .commit();

         }
&#13;
&#13;
&#13;

但这不是正确的解决方案。该应用程序通过这样做,但这些行存在于课程代码中。也许你可以看到上面代码出了什么问题!

相关问题