마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

메인액티비티에서 R을 인식하지 못합니다.(빌드 오류)

0 추천

다른 사람과 하나의 프로그램을 코딩중인데.. 제가 담당한 부분을 합치기 전까진 잘 돌아가던 코드가, 수정을 하니까 동작을하지 않습니다.. 오류가 난 부분을 보니 

R.layout.activity_main
R.id.text

처럼 R로 현재 액티비티(?, 제가 이게 정확히 지칭하는 부분이 뭔지 잘 기억이 나지 않아서..)를 지정하는 부분에서 오류가 나더라구요..

 

메인 액티비티는 아래와 같고, 제가 작업한 부분은 가장 마지막 부분인 서버 업로드 부분입니다.

package com.example.ssu.mohae1_03;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
    private static Context c;
    //
    TextView text;

    // 팝업에서 선택한 활동 저장 변수
    int mSelect = 0;
    int timer;

    MyCalendar myCalendar;
    ActivityDBHelper mohaeDB;
    DBcontroler controler;
    Table activity;
    Thread thread;
    Alarm alarm;
    Handler alarmHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        c = this;

        text = (TextView) findViewById(R.id.text);
        final AlertDialog.Builder ab = new AlertDialog.Builder(this);

        // 달력생성
        myCalendar = new MyCalendar();
        myCalendar.getDate();

        // activity 테이블
        activity = new Table();

        // DB 생성
        mohaeDB = new ActivityDBHelper(this, "MohaeDB.db", null, 4);
        controler = new DBcontroler(mohaeDB);

        // 알람을 보내는 쓰래드 생성
        alarm = new Alarm(handler);
        thread = new Thread(alarm);
        thread.start();

        // get alarm handler
        alarmHandler = alarm.getAlarmHandler();

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); //네트워크 사용 정책 추가
        StrictMode.setThreadPolicy(policy);
    }

    // 시간 설정하기
    public void timesetOnClick(View v) {
        //
        Log.d("mydebug", "timeset click");
        final LinearLayout linear = (LinearLayout)View.inflate(this, R.layout.time, null);

        new AlertDialog.Builder(this)
                .setTitle("시간을 입력하시오")
                .setView(linear)
                .setPositiveButton("확인", new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        EditText time = (EditText)linear.findViewById(R.id.timeedit);
                        String str = time.getText().toString();
                        timer = Integer.parseInt(str);
                        Message msg = new Message();
                        msg.what = 1;
                        msg.arg1 = timer*1000;

                        alarmHandler.sendMessage(msg);
                        alarmHandler.sendEmptyMessage(0);
                    }
                })
                .setNegativeButton("취소", null)
                .show();
    }

    // 저장된 데이터 읽기
    public void readOnClick(View v) {
        if (!isFinishing()) {
            SQLiteDatabase db = mohaeDB.getReadableDatabase();
            Cursor cursor;
            cursor = db.rawQuery("SELECT _id, name, time, date FROM activity", null);
            Log.d("mydebug", "select 쿼리 성공");

            String result = "";
            while (cursor.moveToNext()) {
                String id = cursor.getString(0);
                String name = cursor.getString(1);
                String time = cursor.getString(2);
                String date = cursor.getString(3);
                result += (id + " " + name + " " + time + " " + date + "\n");
            }

            if (result.length() == 0) {
                text.setText("Empty");
            } else {
                text.setText(result);
            }

        }
    }

    public Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            if (msg.what == 0) {
                new AlertDialog.Builder(c)
                        .setTitle("어떤 활동 중이신가요?")
                        .setSingleChoiceItems(R.array.activities, mSelect,
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                                        int which) {
                                        // TODO Auto-generated method stub
                                        mSelect = which;
                                    }
                                })
                                // .setView(linear)
                        .setPositiveButton("확인", new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                                int which) {
                                // TODO Auto-generated method stub
                                String[] activities = getResources()
                                        .getStringArray(R.array.activities);

                                // DB 삽입
                                activity.setName(activities[mSelect]);
                                activity.setTime(timer);
                                activity.setDate(myCalendar.getDate());
                                controler.insert(activity);
                                alarmHandler.sendEmptyMessage(0); // 다시 팝업을 보내도록 요청
                            }
                        }).setNegativeButton("취소", new OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                alarmHandler.sendEmptyMessage(0); // 다시 팝업을 보내도록 요청
                            }
                }).show();

            }
        }
    };

    @Override
    protected void onStop() { // 액티비티 종료시 쓰래드 종료
        // TODO Auto-generated method stub
        super.onStop();
        handler.removeMessages(0);
        thread.interrupt(); // 알람 스레드 종료
    }

    // 그래프 그리기
    public void graphOnClick(View v) {

    }

    // 서버 업로드
    public void serverOnClick(View v) {

        WebDBcontroler task=new WebDBcontroler();

        if (!isFinishing()) {
            SQLiteDatabase db = mohaeDB.getReadableDatabase();
            Cursor cursor;
            cursor = db.rawQuery("SELECT _id, name, time, date FROM activity", null);
            Log.d("mydebug", "select 쿼리 성공");

            String result = "";
            while (cursor.moveToNext()) {
                String id = cursor.getString(0);
                String name = cursor.getString(1);
                String time = cursor.getString(2);
                String date = cursor.getString(3);

                task.doInBackground(id,name,time,date);
            }

            if (result.length() == 0) {
                text.setText("Empty");
            } else {
                text.setText(result);
            }

        }
    }
}

함수 부분 추가한 것 외에는, 

StrictMode.ThreadPolicy policy 로 네트워크 정책을 사용한다는걸 강제로 하나 추가했습니다.

 

KKE (400 포인트) 님이 2016년 5월 14일 질문
매니페스트에서도 오류가 나고 있고..

여기서는 인터넷 사용 권한을 한줄 추가했어요..

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ssu.mohae1_03"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:minsdkversion="8"
        android:targetSdkVersion="22" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:name="com.android.tools.fd.runtime.BootstrapApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.ssu.mohae1_03.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>
(글자수 제한으로 여기에 추가적으로 작성합니다..)
오류 내용은 다음처럼 나오고 있습니다 ㅜㅜ..

C:\workspace\Mohae1_03\app\build\intermediates\bundles\debug\instant-run\AndroidManifest.xml
Error:(7) No resource identifier found for attribute 'minsdkversion' in package 'android'
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\Siwha\AppData\Local\Android\Sdk\build-tools\22.0.1\aapt.exe'' finished with non-zero exit value 1

1개의 답변

0 추천
 
채택된 답변
    <uses-sdk
        android:minSdkVersion="15"
        android:minsdkversion="8"
        android:targetSdkVersion="22" />

minSdkVersion 이 2개가 들어가있네요.. 가운데지우세영 

 

 

sadeva (21,550 포인트) 님이 2016년 5월 15일 답변
KKE님이 2016년 5월 23일 채택됨
감사합니다! 집에 도착하는데로 수정해볼게요 :)
...